package views.createViews;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JComboBox;
import javax.swing.JLabel;

import core.logic.dataAccess.PersoneelDAO;
import core.logic.dataAccess.Personeel_VluchtDAO;
import core.logic.dataAccess.VliegtuigenDAO;
import core.logic.dataAccess.VluchtenDAO;
import core.logic.services.BemanningAanduidenService;
import core.models.dataModels.BemanningAanduidenModel;
import core.models.domainModel.Eigenaar;
import core.models.domainModel.Personeel;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JScrollBar;
import javax.swing.JScrollPane;

public class ToevoegenBemanningView extends JFrame {
	private BemanningAanduidenModel _model;

	public ToevoegenBemanningView(BemanningAanduidenModel model) {

		_model = model;

		int AantalPilotenToegevoegd = 0;
		int AantalStewardsToegevoegd = 0;
		JComboBox cmbPiloten = new JComboBox();

		JComboBox cmbStewardsStewardessen = new JComboBox();

		// label met info over het aantal nodige piloten en stewards

		JLabel lblInfo = new JLabel("Aantal nodige piloten: "
				+ Integer.toString(_model.getAantalPiloten())
				+ "Aantal nodige stewards: "
				+ Integer.toString(_model.getAantalStuwards()));

		if (_model.get_mogelijkePiloten() != null) {
			for (Personeel _Personeel : _model.get_mogelijkePiloten()) {

				// comboboxen met nog niet geselecteerde piloten die van een
				// bepaalde eigenaar zijn opvullen MAAR niet met reeds
				// geselecteerde piloten
				cmbPiloten.addItem(_Personeel);

			}
		}
		if (_model.get_mogelijkeStewardsStewardessen() != null) {
			for (Personeel _Personeel : _model
					.get_mogelijkeStewardsStewardessen()) {

				// comboboxen met nog niet geselecteerde piloten die van een
				// bepaalde eigenaar zijn opvullen MAAR niet met reeds
				// geselecteerde piloten
				cmbStewardsStewardessen.addItem(_Personeel);

			}
		}

		// model opvullen met de personeels leden die op de vlucht aanwezig zijn
		// (als er al zijn?)
		 _model.set_geselecteerd(Personeel_VluchtDAO.getPersoneelByVluchtID(_model.getVluchtId()));

		// tellen voor lblminimum waardes te weten
		if (_model.get_geselecteerd() != null) {
			// tellen aantal piloten en stewards die reeds zijn toegevoegd
			for (Personeel _Personeel : _model.get_geselecteerd()) {
				if (_Personeel.get_personeelType().equals("P")) {
					AantalPilotenToegevoegd++;

					// reeds geselecteerde piloten uit combobox halen want die
					// mogen niet 2 maal geselecteerd worden
					cmbPiloten.removeItem(_Personeel);

				} else if (_Personeel.get_personeelType().equals("S")) {

					AantalStewardsToegevoegd++;

					// reeds geselecteerde stewards uit combobox halen want die
					// mogen niet 2 maal geselecteerd worden
					cmbStewardsStewardessen.removeItem(_Personeel);
				}
			}
		}

		// label met info over hoeveel piloten en stewards reeds zijn toegewezen
		JLabel lblMinimum = new JLabel("Aantal piloten toegevoegd: "
				+ AantalPilotenToegevoegd + "     Aantal stewards toegevoegd: "
				+ AantalStewardsToegevoegd);

		// eerst listbox opvullen met piloten die reeds zijn toegewezen
		DefaultListModel<Personeel> listModel = new DefaultListModel<Personeel>();
		for (Personeel _Personeel : _model.get_geselecteerd()) {
			listModel.addElement(_Personeel);
		}

		JList list = new JList(listModel);
		JScrollPane scrollPane = new JScrollPane(list);

		JButton btnToevoegenBemanning = new JButton("Toevoegen bemannig");
		btnToevoegenBemanning.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {

				// todo

				// checken of het aantal geselecteerde piloten en stewards
				// overeenkomt het het nodige aantal: messagebox

			}
		});

		GroupLayout groupLayout = new GroupLayout(getContentPane());
		groupLayout
				.setHorizontalGroup(groupLayout
						.createParallelGroup(Alignment.LEADING)
						.addGroup(
								groupLayout
										.createSequentialGroup()
										.addGap(57)
										.addGroup(
												groupLayout
														.createParallelGroup(
																Alignment.LEADING)
														.addGroup(
																groupLayout
																		.createSequentialGroup()
																		.addComponent(
																				lblMinimum)
																		.addContainerGap())
														.addGroup(
																groupLayout
																		.createParallelGroup(
																				Alignment.TRAILING)
																		.addComponent(
																				cmbStewardsStewardessen,
																				0,
																				317,
																				Short.MAX_VALUE)
																		.addGroup(
																				groupLayout
																						.createSequentialGroup()
																						.addGap(67)
																						.addComponent(
																								scrollPane,
																								GroupLayout.PREFERRED_SIZE,
																								GroupLayout.DEFAULT_SIZE,
																								GroupLayout.PREFERRED_SIZE)
																						.addPreferredGap(
																								ComponentPlacement.RELATED)
																						.addComponent(
																								list,
																								GroupLayout.DEFAULT_SIZE,
																								294,
																								Short.MAX_VALUE))
																		.addGroup(
																				groupLayout
																						.createSequentialGroup()
																						.addComponent(
																								btnToevoegenBemanning,
																								GroupLayout.DEFAULT_SIZE,
																								307,
																								Short.MAX_VALUE)
																						.addContainerGap())
																		.addComponent(
																				cmbPiloten,
																				0,
																				317,
																				Short.MAX_VALUE)
																		.addComponent(
																				lblInfo,
																				Alignment.LEADING,
																				GroupLayout.DEFAULT_SIZE,
																				317,
																				Short.MAX_VALUE)))));
		groupLayout
				.setVerticalGroup(groupLayout
						.createParallelGroup(Alignment.LEADING)
						.addGroup(
								groupLayout
										.createSequentialGroup()
										.addGap(25)
										.addComponent(lblInfo)
										.addPreferredGap(
												ComponentPlacement.RELATED)
										.addComponent(lblMinimum)
										.addGap(16)
										.addComponent(cmbPiloten,
												GroupLayout.PREFERRED_SIZE,
												GroupLayout.DEFAULT_SIZE,
												GroupLayout.PREFERRED_SIZE)
										.addGap(18)
										.addComponent(cmbStewardsStewardessen,
												GroupLayout.PREFERRED_SIZE,
												GroupLayout.DEFAULT_SIZE,
												GroupLayout.PREFERRED_SIZE)
										.addGroup(
												groupLayout
														.createParallelGroup(
																Alignment.LEADING)
														.addGroup(
																groupLayout
																		.createSequentialGroup()
																		.addPreferredGap(
																				ComponentPlacement.UNRELATED)
																		.addComponent(
																				list,
																				GroupLayout.DEFAULT_SIZE,
																				234,
																				Short.MAX_VALUE)
																		.addGap(18))
														.addGroup(
																groupLayout
																		.createSequentialGroup()
																		.addGap(77)
																		.addComponent(
																				scrollPane,
																				GroupLayout.PREFERRED_SIZE,
																				GroupLayout.DEFAULT_SIZE,
																				GroupLayout.PREFERRED_SIZE)
																		.addPreferredGap(
																				ComponentPlacement.RELATED)))
										.addComponent(btnToevoegenBemanning)
										.addGap(44)));
		getContentPane().setLayout(groupLayout);
	}
}
